{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "5d904dee",
   "metadata": {},
   "source": [
    "# Example 6: Solving Partial Differential Equation (PDE)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "7d568912",
   "metadata": {},
   "source": [
    "We aim to solve a 2D poisson equation $\\nabla^2 f(x,y) = -2\\pi^2{\\rm sin}(\\pi x){\\rm sin}(\\pi y)$, with boundary condition $f(-1,y)=f(1,y)=f(x,-1)=f(x,1)=0$. The ground truth solution is $f(x,y)={\\rm sin}(\\pi x){\\rm sin}(\\pi y)$."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "0e2bc449",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "pde loss: 6.15e-01 | bc loss: 3.94e-06 | l2: 3.71e-05 : 100%|█| 100/100 [06:35<0\n",
      "pde loss: 4.34e-02 | bc loss: 3.42e-06 | l2: 1.16e-06 : 100%|█| 100/100 [06:32<0\n",
      "pde loss: 4.62e-03 | bc loss: 8.96e-07 | l2: 3.01e-07 : 100%|█| 100/100 [06:50<0\n"
     ]
    }
   ],
   "source": [
    "from kan import KAN, LBFGS\n",
    "import torch\n",
    "import matplotlib.pyplot as plt\n",
    "from torch import autograd\n",
    "from tqdm import tqdm\n",
    "\n",
    "dim = 2\n",
    "np_i = 51 # number of interior points (along each dimension)\n",
    "np_b = 51 # number of boundary points (along each dimension)\n",
    "ranges = [-1, 1]\n",
    "\n",
    "\n",
    "def batch_jacobian(func, x, create_graph=False):\n",
    "    # x in shape (Batch, Length)\n",
    "    def _func_sum(x):\n",
    "        return func(x).sum(dim=0)\n",
    "    return autograd.functional.jacobian(_func_sum, x, create_graph=create_graph).permute(1,0,2)\n",
    "\n",
    "# define solution\n",
    "sol_fun = lambda x: torch.sin(torch.pi*x[:,[0]])*torch.sin(torch.pi*x[:,[1]])\n",
    "source_fun = lambda x: -2*torch.pi**2 * torch.sin(torch.pi*x[:,[0]])*torch.sin(torch.pi*x[:,[1]])\n",
    "\n",
    "# interior\n",
    "sampling_mode = 'mesh' # 'radnom' or 'mesh'\n",
    "\n",
    "x_mesh = torch.linspace(ranges[0],ranges[1],steps=np_i)\n",
    "y_mesh = torch.linspace(ranges[0],ranges[1],steps=np_i)\n",
    "X, Y = torch.meshgrid(x_mesh, y_mesh, indexing=\"ij\")\n",
    "if sampling_mode == 'mesh':\n",
    "    #mesh\n",
    "    x_i = torch.stack([X.reshape(-1,), Y.reshape(-1,)]).permute(1,0)\n",
    "else:\n",
    "    #random\n",
    "    x_i = torch.rand((np_i**2,2))*2-1\n",
    "\n",
    "# boundary, 4 sides\n",
    "helper = lambda X, Y: torch.stack([X.reshape(-1,), Y.reshape(-1,)]).permute(1,0)\n",
    "xb1 = helper(X[0], Y[0])\n",
    "xb2 = helper(X[-1], Y[0])\n",
    "xb3 = helper(X[:,0], Y[:,0])\n",
    "xb4 = helper(X[:,0], Y[:,-1])\n",
    "x_b = torch.cat([xb1, xb2, xb3, xb4], dim=0)\n",
    "\n",
    "steps = 20\n",
    "alpha = 0.01\n",
    "log = 1\n",
    "\n",
    "\n",
    "grids = [5,10,20]\n",
    "steps = 100\n",
    "\n",
    "pde_losses = []\n",
    "bc_losses = []\n",
    "l2_losses = []\n",
    "\n",
    "for grid in grids:\n",
    "    if grid == grids[0]:\n",
    "        model = KAN(width=[2,2,1], grid=grid, k=3, grid_eps=1.0, noise_scale_base=0.25)\n",
    "    else:\n",
    "        model = KAN(width=[2,2,1], grid=grid, k=3).initialize_from_another_model(model, x_i)\n",
    "\n",
    "    def train():\n",
    "        optimizer = LBFGS(model.parameters(), lr=1, history_size=10, line_search_fn=\"strong_wolfe\", tolerance_grad=1e-32, tolerance_change=1e-32, tolerance_ys=1e-32)\n",
    "\n",
    "        pbar = tqdm(range(steps), desc='description')\n",
    "\n",
    "        for _ in pbar:\n",
    "            def closure():\n",
    "                global pde_loss, bc_loss\n",
    "                optimizer.zero_grad()\n",
    "                # interior loss\n",
    "                sol = sol_fun(x_i)\n",
    "                sol_D1_fun = lambda x: batch_jacobian(model, x, create_graph=True)[:,0,:]\n",
    "                sol_D1 = sol_D1_fun(x_i)\n",
    "                sol_D2 = batch_jacobian(sol_D1_fun, x_i, create_graph=True)[:,:,:]\n",
    "                lap = torch.sum(torch.diagonal(sol_D2, dim1=1, dim2=2), dim=1, keepdim=True)\n",
    "                source = source_fun(x_i)\n",
    "                pde_loss = torch.mean((lap - source)**2)\n",
    "\n",
    "                # boundary loss\n",
    "                bc_true = sol_fun(x_b)\n",
    "                bc_pred = model(x_b)\n",
    "                bc_loss = torch.mean((bc_pred-bc_true)**2)\n",
    "\n",
    "                loss = alpha * pde_loss + bc_loss\n",
    "                loss.backward()\n",
    "                return loss\n",
    "\n",
    "            if _ % 5 == 0 and _ < 50:\n",
    "                model.update_grid_from_samples(x_i)\n",
    "\n",
    "            optimizer.step(closure)\n",
    "            sol = sol_fun(x_i)\n",
    "            loss = alpha * pde_loss + bc_loss\n",
    "            l2 = torch.mean((model(x_i) - sol)**2)\n",
    "\n",
    "            if _ % log == 0:\n",
    "                pbar.set_description(\"pde loss: %.2e | bc loss: %.2e | l2: %.2e \" % (pde_loss.cpu().detach().numpy(), bc_loss.cpu().detach().numpy(), l2.detach().numpy()))\n",
    "\n",
    "            pde_losses.append(pde_loss.detach().numpy())\n",
    "            bc_losses.append(bc_loss.detach().numpy())\n",
    "            l2_losses.append(l2.detach().numpy())\n",
    "        \n",
    "    train()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "dcbfa677",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.legend.Legend at 0x7ff2b0bc0190>"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(pde_losses, marker='o')\n",
    "plt.plot(bc_losses, marker='o')\n",
    "plt.plot(l2_losses, marker='o')\n",
    "plt.yscale('log')\n",
    "plt.xlabel('steps')\n",
    "plt.legend(['PDE loss', 'BC loss', 'L2 squared'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "bce40477",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.7"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
